package DAO;

import Util.ConnectionUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.Estoque;
import model.Produto;

public class EstoqueDAO {

    private Connection con;

    public EstoqueDAO() throws Exception {
        con = ConnectionUtil.getConn();
    }

    public void insert(Estoque item) throws SQLException {
        String SQL = "INSERT INTO ESTOQUE VALUES (?,?,?,?,?,?)";
        PreparedStatement stmt = con.prepareStatement(SQL);

        stmt.setInt(1, item.getCodigo());
        stmt.setInt(2, item.getProduto().getCodigo());
        stmt.setDate(3, new java.sql.Date(item.getDataCadastro().getTime()));
        stmt.setDouble(4, item.getQuantidade());
        stmt.setString(5, item.getDescricao());
        stmt.setBoolean(6, item.getTipo());
        stmt.execute();
    }

    public void update(Estoque item) throws SQLException {
        String SQL = "UPDATE ESTOQUE SET STQ_NOME = ?, PRD_ID = ?, STQ_DATACADASTRO = ?, STQ_QUANTIDADE = ?, STQ_DESCRICAO = ?, STQ_TIPO = ? WHERE STQ_ID = ?";
        PreparedStatement stmt = con.prepareStatement(SQL);
        stmt.setInt(1, item.getCodigo());
        stmt.setInt(2, item.getProduto().getCodigo());
        stmt.setDate(3, new java.sql.Date(item.getDataCadastro().getTime()));
        stmt.setDouble(4, item.getQuantidade());
        stmt.setString(5, item.getDescricao());
        stmt.setBoolean(6, item.getTipo());
        stmt.execute();
    }

        
        
    public List<Estoque> FindProduto(String nome) throws SQLException {
        
        String SQL = "SELECT E.STQ_ID, P.PRD_NOME, E.STQ_DATACADASTRO, E.STQ_TIPO, E.STQ_QUANTIDADE FROM ESTOQUE E "
                   + "INNER JOIN PRODUTO P ON E.PRD_ID = P.PRD_ID WHERE PRD_NOME LIKE ?";

        PreparedStatement p = con.prepareStatement(SQL);
        p.setString(1, "%"+nome+"%");
        ResultSet rs = p.executeQuery();
        
        List<Estoque> lsEstoque = new ArrayList<>();
        while (rs.next()) {
            Estoque est = new Estoque();
            est.setCodigo(rs.getInt("E.STQ_ID"));
            Produto prod = new Produto();
            prod.setNome(rs.getString("P.PRD_NOME"));
            est.setProduto(prod);
            est.setDataCadastro(rs.getDate("E.STQ_DATACADASTRO"));
            est.setTipo(rs.getBoolean("E.STQ_TIPO"));
            est.setQuantidade(rs.getDouble("E.STQ_QUANTIDADE"));
            lsEstoque.add(est);
        }
        return lsEstoque;
    }   
    
    public List<Estoque> FindGrid() throws SQLException {

        String SQL = "SELECT E.STQ_ID, P.PRD_NOME, E.STQ_DATACADASTRO, E.STQ_TIPO, E.STQ_QUANTIDADE FROM ESTOQUE E "
                   + "INNER JOIN PRODUTO P ON E.PRD_ID = P.PRD_ID WHERE 1=1";
        PreparedStatement p = con.prepareStatement(SQL);
        ResultSet rs = p.executeQuery();
        
        List<Estoque> lsEstoque = new ArrayList<>();
        while (rs.next()) {
            Estoque est = new Estoque();
            est.setCodigo(rs.getInt("E.STQ_ID"));
            Produto prod = new Produto();
            prod.setNome(rs.getString("P.PRD_NOME"));
            est.setProduto(prod);
            est.setDataCadastro(rs.getDate("E.STQ_DATACADASTRO"));
            est.setTipo(rs.getBoolean("E.STQ_TIPO"));
            est.setQuantidade(rs.getDouble("E.STQ_QUANTIDADE"));
            lsEstoque.add(est);
        }
        return lsEstoque;
    }   
    
    
    public List<Estoque> findAll() throws SQLException {

        String SQL = "SELECT STQ_NOME, PRD_ID, STQ_DATACADASTRO, STQ_QUANTIDADE, STQ_DESCRICAO, STQ_TIPO FROM ESTOQUE WHERE 1=1";

        PreparedStatement p = con.prepareStatement(SQL);
        ResultSet rs = p.executeQuery();

        List<Estoque> lsEstoque = new ArrayList<>();
        while (rs.next()) {
            Estoque est = new Estoque();
            est.setCodigo(rs.getInt("STQ_ID"));
            Produto prod = new Produto();
            prod.setCodigo(rs.getInt("PRD_ID"));
            est.setDataCadastro(rs.getDate("STQ_DATACADASTRO"));
            est.setQuantidade(rs.getDouble("STQ_QUANDITADE"));
            est.setDescricao(rs.getString("STQ_DESCRICAO"));
            est.setTipo(rs.getBoolean("STQ_TIPO"));
            lsEstoque.add(est);
        }
        return lsEstoque;
    }
}